package code.reptile.core;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* <p>解析Html</p>
*
* @version 1.0
* @author:huangwf
* @date:2017/8/21 14:24
* @history
*/
public class AnalzeHtml {

public final static String HTML_ATTR = "HTMLATTR";
public final static String HTML_TEXT = "HTMLTEXT";

//解析html
public static List<Map<String, Object>> analzeHtmlById(String path, String id, String tag, String attr) {

//读取本地html的路径
File file = new File(path);
//生成一个数组用来存储这些路径下的文件名
File[] array = file.listFiles();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
//写个循环读取这些文件的名字
for (File anArray : array != null ? array : new File[0]) {
try {
if (anArray.isFile()) {
//输出html文件名字
System.out.println("正在解析网址：" + anArray.getName());

//下面开始解析本地的html
Document doc = Jsoup.parse(anArray, "UTF-8");
//得到标签的属性id为id下所有内容
Element content = doc.getElementById(id);
//分离出html下标签<tag></tag>之间的所有东西
Elements links = content.getElementsByTag(tag);
for (Element link : links) {
Map<String, Object> map = new HashMap<String, Object>();
//得到标签里元素中的值
String linkAttr = link.attr(attr);
map.put(HTML_ATTR, linkAttr);
//得到标签里面的字符串
String linkText = link.text();
map.put(HTML_TEXT, linkText);
list.add(map);
}
}
} catch (Exception e) {
System.out.println("网址：" + anArray.getName() + "解析出错");
e.printStackTrace();
}
}
return list;
}

//解析html
public static List<Map<String, Object>> analzeHtmlByClass(String path, String className, String tag, String attr) {

//读取本地html的路径
File file = new File(path);
//生成一个数组用来存储这些路径下的文件名
File[] array = file.listFiles();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
//写个循环读取这些文件的名字
for (File anArray : array != null ? array : new File[0]) {
try {
if (anArray.isFile()) {
//输出html文件名字
System.out.println("正在解析网址：" + anArray.getName());

//下面开始解析本地的html
Document doc = Jsoup.parse(anArray, "UTF-8");
//得到标签的属性id为id下所有内容
Elements contents = doc.getElementsByClass(className);
for (Element content : contents) {//分离出html下标签<tag></tag>之间的所有东西

Elements links = content.getElementsByTag(tag);
for (Element link : links) {
Map<String, Object> map = new HashMap<String, Object>();
//得到标签里元素中的值
String linkAttr = link.attr(attr);
map.put(HTML_ATTR, linkAttr);
//得到标签里面的字符串
String linkText = link.text();
map.put(HTML_TEXT, linkText);
list.add(map);
}
}
}
} catch (Exception e) {
System.out.println("网址：" + anArray.getName() + "解析出错");
e.printStackTrace();
}
}
return list;
}

/**
* <p>解析path文件夹下所以html文件</p>
*
* @author:huangwf
* @date:2017/8/21 15:43
* @version 1.0
* @history
*/
public static List<Document> analzeListHtml(String path) {

    //读取本地html的路径
    File file = new File(path);
    //生成一个数组用来存储这些路径下的文件名
    File[] array = file.listFiles();
    List<Document> list = new ArrayList<Document>();
        //写个循环读取这些文件的名字
        for (File anArray : array != null ? array : new File[0]) {
        try {
        if (anArray.isFile()) {
        //输出html文件名字
        System.out.println("正在解析网址：" + anArray.getName());

        //下面开始解析本地的html
        Document doc = Jsoup.parse(anArray, "UTF-8");
        list.add(doc);
        }
        } catch (Exception e) {
        System.out.println("网址：" + anArray.getName() + "解析出错");
        e.printStackTrace();
        }
        }
        return list;
        }

        /**
        * <p>解析htmld单个文件</p>
        *
        * @author:huangwf
        * @date:2017/8/21 15:43
        * @version 1.0
        * @history
        */
        public static Document analzeHtml(String htmlName) {
        File file = new File(htmlName);
        try {
        if (file.isFile()) {
        //输出html文件名字
        System.out.println("正在解析网址：" + file.getName());

        //下面开始解析本地的html
        Document doc = Jsoup.parse(file, "UTF-8");
        return doc;
        }
        } catch (Exception e) {
        System.out.println("网址：" + file.getName() + "解析出错");
        e.printStackTrace();
        }
        return null;
        }

        public static Element analzeHtmlById(Document doc, String id) {
        return doc.getElementById(id);
        }

        public static Elements analzeHtmlByClass(Document doc, String className) {
        return doc.getElementsByClass(className);
        }

        public static Elements analzeHtmlByTag(Document doc, String tag) {
        return doc.getElementsByTag(tag);
        }

        public static Element analzeHtmlById(Element element, String id) {
        return element.getElementById(id);
        }

        public static Elements analzeHtmlByClass(Element element, String className) {
        return element.getElementsByClass(className);
        }

        public static Elements analzeHtmlByTag(Element element, String tag) {
        return element.getElementsByTag(tag);
        }

        public static String analzeHtmlByText(Element element, String txet) {
        return element.text();
        }

        public static String analzeHtmlByAttr(Element element, String attr) {
        return element.attr(attr);
        }
        }
